package com.yfqy.app.security.resourceapi;

import com.yfqy.app.security.login.LoginUserInfo;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.authentication.AbstractAuthenticationToken;

@Setter
@Getter
public class JwtAuthentication extends AbstractAuthenticationToken {

    private String jwtToken; // 前端传过来
    private LoginUserInfo currentUser; // 认证成功后，后台从数据库获取信息

    public JwtAuthentication() {
        // 权限，用不上，直接null
        super(null);
    }

    public JwtAuthentication(LoginUserInfo currentUser) {
        super(currentUser.getAuthorities());
        this.currentUser = currentUser;
    }

    @Override
    public Object getCredentials() {
        // 根据SpringSecurity的设计，授权成后，Credential（比如，登录密码）信息需要被清空
        return isAuthenticated() ? null : jwtToken;
    }

    @Override
    public Object getPrincipal() {
        // 根据SpringSecurity的设计，授权成功之前，getPrincipal返回的客户端传过来的数据。授权成功后，返回当前登陆用户的信息
        return isAuthenticated() ? currentUser : jwtToken;
    }

}
